﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTServices.Dominio;
using System.Data.SqlClient;

namespace RESTServices.Persistencia
{
    public class CarteleraDAO
    {

        public Cartelera Crear(CarteleraLigth carteleraCrear)
        {
            Cartelera carteleraCreada = null;
            string sql = "INSERT INTO t_cartelera VALUES (@idcartelera, @idpelicula, @idsala, @fecha, @horario)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@idcartelera", carteleraCrear.IdCartelera));
                    com.Parameters.Add(new SqlParameter("@idpelicula", carteleraCrear.IdPelicula));
                    com.Parameters.Add(new SqlParameter("@idsala", carteleraCrear.IdSala));
                    com.Parameters.Add(new SqlParameter("@fecha", carteleraCrear.Fecha));
                    com.Parameters.Add(new SqlParameter("@horario", carteleraCrear.Horario));
                    com.ExecuteNonQuery();

                }
            }

            carteleraCreada = Obtener(carteleraCrear.IdCartelera);
            return carteleraCreada;
        }
        public Cartelera Obtener(int idcartelera)
        {
            Cartelera carteleraEncontrada = null;
            PeliculaDAO peliculaDao = new PeliculaDAO();
            SalaDAO saladao = new SalaDAO();

            string sql = "SELECT * FROM t_cartelera WHERE idcartelera=@idcartelera";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {

                    com.Parameters.Add(new SqlParameter("@idcartelera", idcartelera));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {

                        if (resultado.Read())
                        {
                            carteleraEncontrada = new Cartelera()
                            {
                                IdCartelera = (int)resultado["idcartelera"],
                                Fecha = (DateTime)resultado["fecha"],
                                Horario = (string)resultado["horario"]

                            };

                            Pelicula p = peliculaDao.Obtener((int)resultado["idpelicula"]);
                            carteleraEncontrada.Pelicula = p;
                            Sala s = saladao.Obtener((int)resultado["idsala"]);
                            carteleraEncontrada.Sala = s;
                        }
                    }
                }
            }

            return carteleraEncontrada;
        }

        public Cartelera Modificar(Cartelera carteleraModificar)
        {

            Cartelera carteleraModificada = null;
            string sql = "UPDATE t_cartelera SET idpelicula=@idpelicula, idsala=@idsala,horario=@horario WHERE idcartelera=@idcartelera";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@idpelicula", carteleraModificar.Pelicula.Idpelicula));
                    com.Parameters.Add(new SqlParameter("@idsala", carteleraModificar.Sala.IdSala));
                    com.Parameters.Add(new SqlParameter("@horario", carteleraModificar.Horario));
                    com.Parameters.Add(new SqlParameter("@idcartelera", carteleraModificar.IdCartelera));
                    com.ExecuteNonQuery();

                }
            }

            carteleraModificada = Obtener(carteleraModificar.IdCartelera);
            return carteleraModificada;
        }

        public string Eliminar(int idCartelera)
        {

            string cadRet = "No se eliminó.";
            string sql = "DELETE from t_cartelera where idcartelera=@idcartelera";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@idcartelera", idCartelera));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.RecordsAffected > 0)
                        {
                            cadRet = "Se eliminó correctamente.";
                        }
                    }
                }
            }
            return cadRet;
        }

        public List<Cartelera> ListarTodos()
        {
            Cartelera al = null;
            List<Cartelera> traeCarteleras = new List<Cartelera>();
            PeliculaDAO peliculaDao = new PeliculaDAO();
            SalaDAO saladao = new SalaDAO();

            string sql = "SELECT * FROM t_cartelera order by fecha";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                              con.Open();
                              using (SqlCommand com = new SqlCommand(sql, con))
                              {
                   
                                  using (SqlDataReader resultado = com.ExecuteReader())
                                      if (resultado.HasRows)
                                      {
                                          while (resultado.Read())
                                          {
                                              Pelicula p = peliculaDao.Obtener((int)resultado["idpelicula"]);
                                              Sala s = saladao.Obtener((int)resultado["idsala"]);

                                              al = new Cartelera()
                                              {
                                                  IdCartelera = (int)resultado["idcartelera"],
                                                  Pelicula = p,
                                                  Sala = s,
                                                  Fecha = (DateTime)resultado["fecha"],                                                  
                                                  Horario = (string)resultado["horario"]
                                              };

                                              traeCarteleras.Add(al);
                                          }
                                      }

                              }
                          }
                                   
                return traeCarteleras;
            }

        }
}

    